/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package entities;

import edu.upc.poo.mercado.enums.Destino;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author alumno
 */
public abstract class MedioTransporte {

    private Double costoCarga;
    private Double costoKm;
    List<Carga> productos;
    private Double costoTransporte;
    private Double ganancia;
    protected ManagerMercado managerMercado = ManagerMercado.getInstance();
    protected Double LIMITE_CARGA = 0.0;
    private Producto mejorProducto;
    private Mercado mejorMercado;

    public MedioTransporte() {
        this(0.0, 0.0);
    }

    public MedioTransporte(Double costoCarga, Double costoKm) {
        this.costoCarga = costoCarga;
        this.costoKm = costoKm;
        this.productos = new ArrayList<Carga>();
    }

    public Double getCostoCarga() {
        return costoCarga;
    }

    public void setCostoCarga(Double costoCarga) {
        this.costoCarga = costoCarga;
    }

    public Double getCostoKm() {
        return costoKm;
    }

    public void setCostoKm(Double costoKm) {
        this.costoKm = costoKm;
    }

    public List<Carga> getCarga() {
        return productos;
    }

    public void setCarga(List<Carga> productos) {
        this.productos = productos;
    }

    

    public Double getCostoTransporte() {
        return costoTransporte;
    }
    
    protected void setCostoTransporte(Double costoTransporte){
        this.costoTransporte = costoTransporte;
    }

    public Double getGanancia() {
        return ganancia;
    }

    protected void setGanancia(Double ganancia) {
        this.ganancia = ganancia;
    }      

    public void addCarga(Carga carga) {
        productos.add(carga);
    }

    public void addCarga(Producto producto, Integer cantidad) {
        productos.add(new Carga(producto, cantidad));
    }

    public Producto getMejorProducto() {
        return mejorProducto;
    }

    protected void setMejorProducto(Producto mejorProducto) {
        this.mejorProducto = mejorProducto;
    }

    public Mercado getMejorMercado() {
        return mejorMercado;
    }

    protected void setMejorMercado(Mercado mejorMercado) {
        this.mejorMercado = mejorMercado;
    }
    
    
    public abstract void calculaCostoTransporte(Destino destino);
    
    public abstract void calculaGananciaTransporte(Destino destino);
    
    public abstract void calculaMayorGanancia();
    
}
